package com.sbdev.service.impl;

import com.sbdev.dao.UserDao;
import com.sbdev.pojo.User;
import com.sbdev.service.UserService;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao  = null;



    /**
     * 从Redis缓存中获取用户信息。
     * 使用了@Cacheable注解，使得该方法的结果可以被缓存。如果缓存中已存在对应键的用户信息，
     * 则直接从缓存中返回，避免了再次查询数据库。缓存的键由'redis_user_'和用户ID拼接而成，
     * 保证了键的唯一性。
     *
     * @param id 用户的ID，作为查询和缓存键的一部分。
     * @return 用户对象，包含用户信息。
     */
    @Override
    @Cacheable(value = "redisCache", key = "'redis_user_'+#id")
    public User getUser(Long id) {
        // 通过UserDao查询Redis中的用户信息。
        return userDao.getUser(id);
    }

    @Override
    // 事务管理器由Spring Boot自动装配，无需自己配置
    @Transactional(isolation = Isolation.READ_COMMITTED)
    public Integer insertUser(User user) {
        return userDao.insertUser(user);
    }

}